home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Source / GNU / cctools / libstuff / allocate.c next >
C/C++ Source or Header  |  1991-09-17  |  2KB  |  98 lines

  1. #include <stdlib.h>
  2. #include <stdarg.h>
  3. #include <string.h>
  4. #include <mach/mach.h>
  5.  
  6. #include "stuff/allocate.h"
  7. #include "stuff/errors.h"
  8. /*
  9.  * allocate() is just a wrapper around malloc that prints an error message and
  10.  * exits if the malloc fails.
  11.  */
  12. void *
  13. allocate(
  14. unsigned long size)
  15. {
  16.     void *p;
  17.  
  18.     if(size == 0)
  19.         return(NULL);
  20.     if((p = malloc(size)) == NULL)
  21.         system_fatal("virtual memory exhausted (malloc failed)");
  22.     return(p);
  23. }
  24.  
  25. /*
  26.  * reallocate() is just a wrapper around realloc that prints and error message
  27.  * and exits if the realloc fails.
  28.  */
  29. void *
  30. reallocate(
  31. void *p,
  32. unsigned long size)
  33. {
  34.     if(p == NULL)
  35.         return(allocate(size));
  36.     if((p = realloc(p, size)) == NULL)
  37.         system_fatal("virtual memory exhausted (realloc failed)");
  38.     return(p);
  39. }
  40.  
  41. /*
  42.  * savestr() malloc's space for the string passed to it, copys the string into
  43.  * the space and returns a pointer to that space.
  44.  */
  45. char *
  46. savestr(
  47. const char *s)
  48. {
  49.     long len;
  50.     char *r;
  51.  
  52.     len = strlen(s) + 1;
  53.     r = (char *)allocate(len);
  54.     strcpy(r, s);
  55.     return(r);
  56. }
  57.  
  58. /*
  59.  * Makestr() creates a string that is the concatenation of a variable number of
  60.  * strings.  It is pass a variable number of pointers to strings and the last
  61.  * pointer is NULL.  It returns the pointer to the string it created.  The
  62.  * storage for the string is malloc()'ed can be free()'ed when nolonger needed.
  63.  */
  64. char *
  65. makestr(
  66. const char *args,
  67. ...)
  68. {
  69.     va_list ap;
  70.     char *s, *p;
  71.     long size;
  72.  
  73.     size = 0;
  74.     if(args != NULL){
  75.         size += strlen(args);
  76.         va_start(ap, args);
  77.         p = (char *)va_arg(ap, char *);
  78.         while(p != NULL){
  79.         size += strlen(p);
  80.         p = (char *)va_arg(ap, char *);
  81.         }
  82.     }
  83.     s = allocate(size + 1);
  84.     *s = '\0';
  85.  
  86.     if(args != NULL){
  87.         (void)strcat(s, args);
  88.         va_start(ap, args);
  89.         p = (char *)va_arg(ap, char *);
  90.         while(p != NULL){
  91.         (void)strcat(s, p);
  92.         p = (char *)va_arg(ap, char *);
  93.         }
  94.         va_end(ap);
  95.     }
  96.     return(s);
  97. }
  98.